package com.xunchi.haichuan.utility;

import java.security.MessageDigest;

/**
 * 作者：lihb<br>
 * 模块名称：工具模块<br>
 * 功能描述：常用的MD5和SHA-1 MD5是麻省理工大学推出的，而SHA－1是美国技术协会标准。 简单的单项散列函数消息处理。<br>
 * 维护记录：
 */
public class Digest {

	/**
	 * 信息显示, 二行制转字符串
	 * 
	 * @param b
	 * @return
	 */
	private static String byte2hex(byte[] b) {
		String hs = "";
		String stmp = "";

		for (int n = 0; n < b.length; n++) {
			stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

			if (stmp.length() == 1)
				hs = hs + "0" + stmp;
			else
				hs = hs + stmp;
			if (n < b.length - 1)
				hs = hs + "";
		}

		return hs.toUpperCase();
	}

	/**
	 * 用MD5校验信息是否更改.
	 * 
	 * @param myInfo
	 * @param digestInfo
	 * @return
	 */
	public static boolean checkMD5Digest(String myInfo, String digestInfo) throws Exception {
		if (myInfo == null || digestInfo == null) {
			return false;
		}

		return digestInfo.equals(getMD5Digest(myInfo));
	}

	/**
	 * 
	 * 根据字符信息用MD5加密,返回
	 * 
	 * @param myInfo
	 * @return
	 * @throws Exception
	 */
	public static String getMD5Digest(String myInfo) throws Exception {
		return getDigest(myInfo, "MD5");
	}

	/**
	 * 用SHA1校验信息是否更改.
	 * 
	 * @param myInfo
	 * @param digestInfo
	 * @return
	 */
	public static boolean checkSHA1Digest(String myInfo, String digestInfo) throws Exception {
		if (myInfo == null || digestInfo == null) {
			return false;
		}

		return digestInfo.equals(getSHA1Digest(myInfo));
	}

	/**
	 * 
	 * 根据字符信息用SHA1加密,返回
	 * 
	 * @param myInfo
	 * @return
	 * @throws Exception
	 */
	public static String getSHA1Digest(String myInfo) throws Exception {
		return getDigest(myInfo, "SHA1");
	}

	/**
	 * 
	 * 根据字符信息获取字符串的消息摘要
	 * 
	 * @param message
	 * @param hashAlgo
	 * @return
	 * @throws Exception
	 */
	public static String getDigest(String message, String hashAlgo) throws Exception {

		if (message == null) {
			return "";
		}

		try {
			MessageDigest alg = MessageDigest.getInstance(hashAlgo);

			alg.update(message.getBytes());

			byte[] digesta = alg.digest();

			return byte2hex(digesta);
		} catch (java.security.NoSuchAlgorithmException ex) {
			// System.out.println("非法摘要算法");
			throw new RuntimeException();
		}
	}

}
